package org.example;

import java.io.InputStream;
import java.io.IOException;
import java.util.List;

import bean.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class TestMybatis {
    public static void main(String[] args) {
        // 创建输入流
        InputStream inputStream = null;
        // 将MyBatis配置文件转化为输入流
        try {
            inputStream =
                    Resources.getResourceAsStream("mybatis.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 通过SqlSessionFactoryBuilder创建SqlSessionFactory对象
        SqlSessionFactory build =
                new SqlSessionFactoryBuilder().build(inputStream);

        // 通过SqlSessionFactory创建SqlSession对象
        SqlSession sqlSession = build.openSession();
        System.out.println(sqlSession);

        // 展示User表
        System.out.println("User表如下：");
        List<User> users1 = sqlSession.selectList("user.selectUser");
        // 将返回值输出
        for (User u : users1) {
            System.out.println(u);
        }

        // 插入一个记录
        System.out.println("插入一条记录（name：李乐， password：21045215）:");
        User u1 = new User();
        u1.setName("李乐");
        u1.setPassword("21045215");
        u1.setAge(22);

        int row = sqlSession.insert("user.addUser", u1);
        if (row == 1) {
            System.out.println("插入成功");
            sqlSession.commit();
        } else {
            System.out.println("插入失败");
            sqlSession.rollback();
        }
        // 重新展示user表
        System.out.println("插入记录后的User表如下：");
        List<User> users2 = sqlSession.selectList("user.selectUser");
        // 将返回值输出
        for (User u : users2) {
            System.out.println(u);
        }

        // 查询用户并更新
        System.out.println("查询用户'user1'，若查到则给user1的密码设置为123456，未查到则返回查询失败信息：");
        User u2 = new User();
        u2.setName("user1");
        u2 = sqlSession.selectOne("user.selectOneUser", u2);

        // 增加 null 检查
        if (u2 != null) {
            u2.setPassword("123456");
            row = sqlSession.update("user.updateUser", u2);
            if (row == 1) {
                System.out.println("更新成功");
                sqlSession.commit();
            } else {
                System.out.println("更新失败");
                sqlSession.rollback();
            }
        } else {
            System.out.println("未找到指定的用户");
        }

        // 删除用户
        System.out.println("删除user1，若user1存在且删除成功则返回删除成功信息，若失败则返回失败信息：");
        int deleteRow = sqlSession.delete("user.deleteUser", u2);
        if (deleteRow == 1) {
            System.out.println("删除成功");
            sqlSession.commit();
        } else {
            System.out.println("删除失败");
            sqlSession.rollback();
        }

        // 关闭事务
        sqlSession.close();
    }
}
